//fileReader3.js
"use strict";

const http = require("http");
const fs = require("fs");
const path = require("path");

// 用法：
// node fileReader3.js [文件名]
// 访问 http://localhost:8081 返回目标文件内容（使用 fs.createReadStream）。

const argName = process.argv[2];

// 若未传文件名，默认读取当前脚本自身内容
const defaultFile = __filename;
const targetFile = argName ? path.resolve(process.cwd(), argName) : defaultFile;

function sendText(res, statusCode, text) {
	res.writeHead(statusCode, { "Content-Type": "text/plain; charset=utf-8" });
	res.end(text);
}

function handleRequest(req, res) {
	// 每次请求都检查一次文件是否存在
	fs.stat(targetFile, (err, stat) => {
		if (err || !stat.isFile()) {
			return sendText(res, 404, `找不到文件：${targetFile}`);
		}
		res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
		const stream = fs.createReadStream(targetFile, { encoding: "utf8" });
		stream.on("error", (e) => {
			// 读取时出错
			if (!res.headersSent) {
				res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
			}
			res.end(`读取文件失败：${e.message}`);
		});
		stream.pipe(res);
	});
}

const server = http.createServer(handleRequest);

server.listen(8081, () => {
	console.log("服务器已启动：http://localhost:8081");
	if (argName) {
		console.log(`将读取传入的文件：${targetFile}`);
	} else {
		console.log("未传入文件名，默认读取当前脚本内容。");
	}
});